package com.tdam2013.grupo12.webMessaging;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Calendar;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xml.sax.SAXException;

import com.tdam2013.grupo12.NuevoMensajeWeb;
import com.tdam2013.grupo12.broadcastReceiver.InformacionRed;

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;

public class EnviarMensaje extends AsyncTask<String, Void, String> {

	private StringBuilder responseStr;
	private HttpClient client = null;
	private HttpPost request = null;
	private HttpResponse response = null;
	private InputStream in;
	private EnviarMensajeHandler handler;
	private NuevoMensajeWeb nuevoMensajeWeb;
	
    public EnviarMensaje(NuevoMensajeWeb nuevoMensajeWeb){
    	super();
    	this.nuevoMensajeWeb = nuevoMensajeWeb;
    }
	@Override
	protected String doInBackground(String... params) {
		String username = params[0];
		String password = params[1];
		String destinatario = params[2];
		String mensaje = params[3];
		try {
			responseStr = new StringBuilder();
			client = new DefaultHttpClient();
		     String url="http://"+InformacionRed.ip+"/MessageSender/";
		      request = new HttpPost(url);
		      StringEntity body= new StringEntity(String.format("<action id=\"%s\" name=\"send-message\"><action-detail><auth username=\"%s\" key=\"%s\"></auth><message to=\"%s\"><![CDATA[%s]]></message></action-detail></action>", Calendar.getInstance().getTimeInMillis(), username, password, destinatario, mensaje), "ISO-8859-1");
		      request.setEntity(body);
		      if(InformacionRed.hayConexion(nuevoMensajeWeb)){
		    	  response = client.execute(request);
		      }else{
		    	  return "No hay conexion";
		      }
		      in = response.getEntity().getContent();
		      BufferedReader reader = new BufferedReader(new InputStreamReader(in));
		      String line = null;
		      while ((line = reader.readLine()) != null) 
		      {
		        responseStr.append(line + "\n");
		      }
		}
		catch (Exception e) {
			Toast toast = Toast.makeText(nuevoMensajeWeb, "No se pudo enviar el mensaje. Intente nuevamente mas tarde.", Toast.LENGTH_SHORT);
			toast.show();
		}
		Log.e("Hola", responseStr.toString());
		return  responseStr.toString();
		
	}
	
	@Override
	protected void onPostExecute(String resultado){
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
		try {
			if(resultado.compareTo("No hay conexion") == 0){
				Toast toast = Toast.makeText(nuevoMensajeWeb, "No se pudo enviar el mensaje. Compruebe su conexion a internet.", Toast.LENGTH_SHORT);
				toast.show();
				return;
			}
			handler = new EnviarMensajeHandler();
			SAXParser parser = saxParserFactory.newSAXParser();
			parser.parse(new ByteArrayInputStream(resultado.getBytes()), handler);
			this.nuevoMensajeWeb.setResultado(handler.getResultado());
		} catch (ParserConfigurationException e) {
			Toast toast = Toast.makeText(nuevoMensajeWeb, "No se pudo enviar el mensaje. Intente nuevamente mas tarde.", Toast.LENGTH_SHORT);
			toast.show();
		} catch (SAXException e) {
			Toast toast = Toast.makeText(nuevoMensajeWeb, "No se pudo enviar el mensaje. Intente nuevamente mas tarde.", Toast.LENGTH_SHORT);
			toast.show();
		} catch (IOException e) {
			Toast toast = Toast.makeText(nuevoMensajeWeb, "No se pudo enviar el mensaje. Intente nuevamente mas tarde.", Toast.LENGTH_SHORT);
			toast.show();
		}
	}
}
